'''
4、读入给定的文本文件“hamlet.txt”，编写两个函数分别实现:
1) 统计所有字母的出现频度,依据频度从高到低，显示前5个字母及其频度，
同时把结果写入文件“hamlet_字母频度.txt”。
	函数名：Read01
2) 统计所有单词的出现频度,依据频度从高到低，显示前10个单词及其频度，
同时把结果写入文件“hamlet_单词频度.txt”。
	函数名：Read02
	(文件名：py0237.py)
	备注：
1、大小写为同一字母。
2、文件中还含个别汉字，不能统计汉字。
3、空字符中不能作为单词。
4、在课件中搜索【Python split()方法、re.split】。
'''
import re
"""判断一个unicode是否是英文字母"""


def is_alphabet(uchar):
	if (uchar >= u'\u0041' and uchar <= u'\u005a') or (uchar >= u'\u0061' and uchar <= u'\u007a'):
		return True
	else:
		return False


def Read01():
	f = open("hamlet.txt", "r", encoding="utf-8")
	str_hamlet = " ".join(f.readlines())
	str_hamlet = str_hamlet.lower()
	
	# 进行切割
	list_hamlet = re.split(' |，|-|\|\r|\n', str_hamlet)
	f.close()

	str_ = ""

	# 得到只有字母的字符串
	for i in range(len(list_hamlet)):
		for j in list_hamlet[i]:
			if is_alphabet(j):  
				str_ += j
	# 生成字母字典
	hamlet_letter = {chr(i): (0) for i in range(97, 123)}
	for i in str_:
		hamlet_letter[i] = hamlet_letter[i] + 1
	# 以value降序排序
	hamlet_letter_sort = sorted(hamlet_letter.items(), key=lambda x: x[1], reverse=True)

	# 写入目标文件
	f = open("hamlet_字母频度.txt", "w")

	for i in range(5):
		str_word = str(hamlet_letter_sort[i])  # 将字典转换成字符串
		f.write(str_word+'\n')
	f.close()


# 思路同Read01()
def Read02():
	f = open("hamlet.txt", "r", encoding="utf-8")
	str_hamlet = " ".join(f.readlines())
	str_hamlet = str_hamlet.lower()

	list_hamlet = re.split(' |，|-|\|\r|\n', str_hamlet)
	f.close()
	# print(list_hamlet)
	str_ = ""

	for i in range(len(list_hamlet)):
		for j in list_hamlet[i]:
			if is_alphabet(j):  
				str_ += j
		str_ += ' '

	list_hamlet = str_.split()

	hamlet_word = {}
	for i in list_hamlet:
		hamlet_word[i] = hamlet_word.get(i, 0)+1
	hamlet_word_sort = sorted(hamlet_word.items(), key=lambda x: x[1], reverse=True)
	
	f = open("hamlet_单词频度.txt", "w")

	for i in range(10):
		str_word = str(hamlet_word_sort[i])  # 将元组转换成字符串
		f.write(str_word+'\n')
	f.close()


Read01()
Read02()
